package cn.edu.nyist.util;

import cn.edu.nyist.controller.CommonUserController;
import cn.edu.nyist.entity.CommonUser;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/*
* 工具类读取Excel类中内容
* */
public class ReadExcel {

    private static Logger log = LoggerFactory.getLogger(ReadExcel.class);

    //总行数
    private int totalRows=0;
    //总列数
    private int totalCells = 0;
    //错误信息接收器
    private String errorMsg;
    //构造方法
    public ReadExcel() {
    }
    //获取总行数
    public int getTotalRows() {
        return totalRows;
    }
    //获取总列数
    public int getTotalCells() {
        return totalCells;
    }

    public String getErrorMsg() {
        return errorMsg;
    }
    //获取错误信息-暂时未用到暂时留着
    public String getErrorInfo() { return errorMsg; }

    /*
    * 读EXCEL文件，获取普通用户信息
    * */
    public List<CommonUser> getExcelInfo(MultipartFile Mfile) {
        //把文件上传的MultipartFile转换成CommonsMultipartFile类型
//        CommonsMultipartFile cf=(CommonsMultipartFile)Mfile;

        //初始化普通用户信息的集合
        List<CommonUser> commonUserList=new ArrayList<CommonUser>();
        //初始化输入流
        InputStream is = null;
        Workbook wb = null;
        try{
            //把上传的文件转成文件流
            is=Mfile.getInputStream();
            boolean isExcel2003=ExcelUtils.isExcel2003;
            //判断excel文件 版本
            if (isExcel2003){
                wb = new HSSFWorkbook(is);
            }else {
                wb = new XSSFWorkbook(is);
            }
            //读取Excel里面普通用户的信息
            commonUserList=readExcelValue(wb);
            is.close();

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(is !=null)
            {
                try{
                    is.close();
                }catch(IOException e){
                    is = null;
                    e.printStackTrace();
                }
            }
        }
        return commonUserList;
    }

    private List<CommonUser> readExcelValue(Workbook wb){
        //得到第一个Shell
        Sheet sheet=wb.getSheetAt(0);
        //得到excel的行数
        this.totalRows=sheet.getPhysicalNumberOfRows();
        log.info("totalRows:"+totalRows);
        //得到excel的列数（前提是有行数）
        //判断行数大于一，并且第一行必须有标题（这里有bug若文件第一行没值就完了）
        if(totalRows>=1 && sheet.getRow(0)!=null){
            this.totalCells=sheet.getRow(0).getPhysicalNumberOfCells();
            log.info("totalCells:"+totalCells);

        }else {
            return null;
        }
        //声明一个对象集合
        List<CommonUser> commonUserList=new ArrayList<CommonUser>();

        //循环Excel行数,从第二行开始。标题不入库
        for(int r=1;r<totalRows;r++){
            Row row = sheet.getRow(r);
            if (row==null){
                continue;
            }
            CommonUser commonUser=new CommonUser();
            //循环Excel的列
            for(int c = 0; c <this.totalCells; c++) {
                Cell cell = row.getCell(c);
                if (null != cell) {
                    if (c == 0) {
                        //设置单元格类型
                        cell.setCellType(CellType.STRING);
                        //设置用户名
                        commonUser.setUsername(String.valueOf(cell.getStringCellValue()));
                    } else if (c == 1) {
                        //设置单元格类型
                        cell.setCellType(CellType.STRING);
                        //设置邮箱
                        commonUser.setEmail(String.valueOf(cell.getStringCellValue()));
                    }
                }
            }
            commonUserList.add(commonUser);
        }
        return commonUserList;
    }

}
